package edu.fasta.sisinfo2.builders;

import java.util.ArrayList;
import java.util.List;

import edu.fasta.sisinfo2.juegos.Juego;
import edu.fasta.sisinfo2.juegos.Trio;
import edu.fasta.sisinfo2.poker.Carta;
import edu.fasta.sisinfo2.poker.Mano;

/**
 * @author Quique
 *
 */
public class TrioBuilder implements BuilderJuegos {

	private BuilderJuegos builderSiguiente;
	
	public TrioBuilder(BuilderJuegos builderSiguiente){
		this.setBuilderSiguiente(builderSiguiente);
	}
	
	
	public Juego buildJuego(Mano mano) { 
		List listaDeManos = new ArrayList();
		listaDeManos = mano.combinatoria(); //le paso una mano de siete cartas y me da las combinatorias posibles
		List manoActual = new ArrayList();
		int contador;
		
		contador = 0;
				
		for(int i=0; i<listaDeManos.size(); i++){ //recorro todas las manos posibles (21)
			manoActual = (List) listaDeManos.get(i);
			List unTrio = new ArrayList();
			int k,j;
			
			for(k=0; k<4; k++) { 
				unTrio.add(manoActual.get(k)); //meto la carta de comparacion
				for (j = k+1; j<5; j++) {
					if ( ((Carta) manoActual.get(k)).getPuntaje() == ( ((Carta) manoActual.get(j)).getPuntaje()) ){
						contador++;
						unTrio.add(manoActual.get(j)); //meto las que valgan lo mismo
					}
				}
				if(contador == 2){
					System.out.println("Se creo un TRIO de " + ((Carta) manoActual.get(k)).imprimirValor());
					
					return new Trio(unTrio);
				}	
				contador = 0;		//libero contador si no forme trio
				unTrio.removeAll(unTrio); //vacio la lista si no forme trio
			}
		}	
		return this.getBuilderSiguiente().buildJuego(mano);
	}
	
	public BuilderJuegos getBuilderSiguiente() {
		return builderSiguiente;
	}
	
	public void setBuilderSiguiente(BuilderJuegos builderSiguiente) {
		this.builderSiguiente = builderSiguiente;
	}

	
}
